<?php
/**
 * mvc核心类库 controller.php
 * User: www.minyifei.cn
 * Date: 15/4/23
 */
class Controller{

    private $smt;

    /**
     * 系统初始化函数，主要初始化smarty模板引擎，定义一些主要的全局模板路径
     * @param $c 控制器名称
     */
    public function _sys_init_action($c){
        $this->smt = new Smarty();
        $this->smt->left_delimiter = "{";
        $this->smt->right_delimiter = "}";
        //模板目录，模板命名为方法名驼峰转下划线，再小写
        $tmpDir = APP_PATH."/tpl/".strtolower(toUnderLineName($c));
        //模板编译缓存目录
        $cmpDir = TEMP_PATH."/tpl_c";
        $this->smt->setTemplateDir($tmpDir)->setCompileDir($cmpDir);
        //定义程序相对路径
        $this->smt->assign("myf_path",getBasePath());
        //定义程序绝对URL路径
        $this->smt->assign("myf_full_url",getFullURL());
        //定义程序根目录绝对URL路径
        $this->smt->assign("myf_project_url",getProjectURL());
    }

    /**
     * 重置smarty模板目录
     * @param $dir
     */
    public function setTemplateDir($dir){
        $this->smt->setTemplateDir($dir);
    }

    /**
     * action前执行的全局方法，可继承并重构
     */
    public function _before_action() {

    }

    /**
     * action后执行的全局方法,可继承并重构
     */
    public function _after_action() {

    }

    /**
     * smarty 设置模板变量
     * @param String $name
     * @param $value
     */
    public function assign($name,$value){
        $this->smt->assign($name,$value);
    }

    /**
     * 获取模板解析后的内容
     * @param String $tplName 模板名称
     * @return String 模板解析后的内容
     */
    public function fetch($tplName){
        return $this->smt->fetch($tplName);
    }

    /**
     * 显示模板解析后的内容
     * @param String $tplName 模板名称
     */
    public function display($tplName){
        $this->smt->display($tplName);
    }

    /**
     * 输出json对象
     * @param $data Array对象/String对象
     */
    public function echoJson($data){
        echoJson($data);
    }

    /**
     * 魔术方法
     * @param type $name
     * @param type $arguments
     */
    public function __call($name, $arguments) {
        echo "error url 404";
    }

}